/**
 * 部门:部门分组
 * author:miaohuaiyu
 * Created by mhy on 2017/1/9.
 */

var groupsName = new Array();   //部门组名 为了判断是否有重名的情况
var accountsId = new Array();   //分组的成员ID
var accounts;                    //得到的全部部门
var groupsId = new Array();      //得到的部门组Id

$(document).ready(function() {

    /* 查看设置中的所有部门组 */
    displayGroupList();
    displayDepartementList($("#datatable-checkbox2"));

    //添加部门分组确定按钮
    $(".btn-primary",".bs-example-modal-ag").click(function () {
        addGroup();
    });

    /* 部门组模板按钮 */
    //编辑
    $(".btn-info","#tab-contentTemplate").attr("onclick","editGroupInfo(this);");
    //删除
    $(".btn-danger","#tab-contentTemplate").attr("onclick"," deleteGroupInfo(this);");

    //添加部门 全选按钮
    $("#check-all1").click(function () {
        var $table = $("#datatable-checkbox2");
        var dttable = $table.dataTable();
        var nTrs = dttable.fnGetNodes();

        if($("#check-all1").prop("checked")){
            for(var i = 0;i < nTrs.length;i++){
                $(nTrs[i]).children("td").eq(0).children("input").prop("checked",true);
            }   //end for
        }else{
            for(var i = 0;i < nTrs.length;i++){
                $(nTrs[i]).children("td").eq(0).children("input").prop("checked",false);
            }   //end for
        }

    })

    //编辑部门 全选按钮
    $("#check-all2").click(function () {
        var $table = $("#datatable-checkbox1");
        var dttable = $table.dataTable();
        var nTrs = dttable.fnGetNodes();

        if($("#check-all2").prop("checked")){
            for(var i = 0;i < nTrs.length;i++){
                $(nTrs[i]).children("td").eq(0).children("input").prop("checked",true);
            }   //end for
        }else{
            for(var i = 0;i < nTrs.length;i++){
                $(nTrs[i]).children("td").eq(0).children("input").prop("checked",false);
            }   //end for
        }
    })
});

/*
 *  函数:查看指定设置中的部门组
 *  author:miaohuaiyu
 * */
function getGroupInfo(e) {
    var groupId = e.getAttribute('href').substr(12);        //获得分组id
    if($("h2",'#tab_content'+groupId).length != 0) return;   //如果已经请求过 则不在请求

    /* 查看指定设置中的部门组 */
    $.ajax({
        type: 'GET',//请求类型
        url: '../account/group/' + groupId,//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType: 'JSON', /*预期服务器返回的数据类型*/
        success: function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            var departments = json.data.group;
            var $liObj;
            var dep;
            var depId;

            for (var i = 0; i < count(departments); i++) {
                dep = departments[i];
                depId = dep.id;     //id

                //显示部门列表
                $liObj = $("#departmentTemplate").clone();

                $("#departmentId", $liObj).append(depId);      //设置部门id
                $("#departmentName", $liObj).append(dep.name);    //设置部门名

                $liObj.css("display", "block");
                $liObj.attr("id", "department" + depId);

                $("#tab_content" + groupId).append($liObj);

            }// ~ end for
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        },
        fail: function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache: true,
    })
};

/*
 *  函数:删除设置中的部门组提示信息
 *  author:miaohuaiyu
 * */
function deleteGroupInfo(e){
    var groupid = $(e).parents(".tab-pane").attr('id').substr(11);
    var $parent = $(".active","#myTab");
    var groupName = $("a",$parent).text();

    $(".modal-title","#deleteGroup").text("删除部门组");       //设置标题名称
    $("h4","#deleteGroup").eq(1).text("确定删除部门组:"+ groupName); //设置确定提示
    $(".btn-primary","#deleteGroup").attr("onclick","deleteGroup("+groupid + ',' +'\'' + groupName +'\'' + ");");  //设置确定按钮
}
/*
 *  函数:删除设置中的部门组
 *  author:miaohuaiyu
 * */
function deleteGroup(groupId,groupName){

    /* 删除指定设置中的部门组 */
    $.ajax({
        type: 'DELETE',//请求类型
        url: '../account/group/' + groupId,//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType: 'JSON', /*预期服务器返回的数据类型*/
        success: function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
           var $prompt = $("h4","#deleteGroup").eq(1);
           var $modal = $(".bs-example-modal-dg");
           var $closeButton = $("button",$modal).eq(1);        //弹出框关闭按钮
           var $ensureButton = $("button",$modal).eq(2);       //弹出框确定按钮

           $ensureButton.attr("disabled","disabled"); //设置编辑确定按钮暂时不可用
           if(json.result){
               //操作成功提示
               for(var i = 0; i < groupsName.length;i++){
                   if(groupName == groupsName[i]){
                       groupsName.splice(i,1);
                   }
               }    //end for
               createPNotify("提示","success","删除成功");
               setTimeout(function(){
                   $closeButton.trigger("click");  //关闭弹出框
                   //刷新列表
                   $("#myTab").children().remove();
                   $(".tab-content").children().remove();
                   displayGroupList();
                   $prompt.text("");   //清空提示信息
                   $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
               }, 500);

           }else{
               $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
               //操作失败提示
               createPNotify("提示","error","删除失败:" + json.err_msg);
           }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        },
        fail: function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache: true,
    })
}

/*
 *  函数:增加设置中的部门组
 *  author:miaohuaiyu
 * */
function addGroup(){
    var groupName = $("input[name='groupName']","#addGroup").val();
    var $prompt = $("h4","#addGroup").eq(1);
    var $modal = $(".bs-example-modal-ag");
    var $closeButton = $("button",$modal).eq(1);        //弹出框关闭按钮
    var $ensureButton = $("button",$modal).eq(2);       //弹出框确定按钮


    if(groupName.length == 0){
        promptInformation($prompt,"error","分组名不能为空");
        return;
    }else if(groupName.length > 10){
        promptInformation($prompt,"error","分组名长度不能大于10");
        return;
    }
    for(var i = 0;i < groupsName.length ;i++){
        if(groupName == groupsName[i]) {
            promptInformation($prompt, "error", "分组名已经存在");
            return;
        }
    }   //end for

    /* 添加部门分组里的部门成员 */
    var $depTable = $("#datatable-checkbox2");
    var depId;
    var dttable = $depTable.dataTable();
    var nTrs = dttable.fnGetNodes();

    for(var i = 0;i < nTrs.length;i++){
        if(!$(nTrs[i]).children("td").eq(0).children("input").attr("disabled")){
            if( $(nTrs[i]).children("td").eq(0).children("input").prop("checked")){
                depId = $(nTrs[i]).children("td").eq(1).text();
                accountsId.push(depId);
            }
        }
    }   //end for

    $ensureButton.attr("disabled","disabled"); //设置编辑确定按钮暂时不可用
    /* 功能:添加设置中的部门组 */
    $.ajax({
        type: 'PUT',//请求类型
        url: '../account/group/',//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        data: JSON.stringify({
                                "opt": "save",
                                "name": groupName,
                                "group": accountsId
        }),
        dataType: 'JSON', /*预期服务器返回的数据类型*/
        success: function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            var $prompt = $("h4","#addGroup").eq(1);

            if(json.result){
                //操作成功提示
                promptInformation($prompt,"success","添加成功 ..稍后跳转");
                setTimeout(function(){
                  reloadPage();
                }, 500);
            }else{
                //操作失败提示
                $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
                promptInformation($prompt,"error",json.err_msg);
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
        },
        fail: function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache: true,
    })
}

/*
 *  函数:编辑设置中的部门组提示信息
 *  author:miaohuaiyu
 * */
function editGroupInfo(e){
    var groupId = $(e).parents(".tab-pane").attr('id').substr(11);
    var $parent = $(".active","#myTab");
    var groupName = $("a",$parent).text();
    var datas = new Array();
    var arr = new Array();
    var $modal = $(".bs-example-modal-eg");
    var $ensureButton = $("button",$modal).eq(2);       //弹出框确定按钮

    /* 功能:查看指定的部门组 */
    $.ajax({
        type:'GET',//请求类型
        url:'../account/group/' + groupId,//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType:'JSON',/*预期服务器返回的数据类型*/
        success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            var newAccounts = json.data.group;

            for(var i = 0; i < count(accounts); i++){
                arr = [];
                arr[1] = accounts[i].id;
                arr[2] = accounts[i].name;

                datas[i] = arr;
            }  //end for

            var $table = $("#datatable-checkbox1");

            clearTables($table);
            initTable($table,datas);  //创建表

            var dttable = $table.dataTable();
            var nTrs = dttable.fnGetNodes();

            for(var i = 0;i < count(newAccounts);i++){
               for(var j = 0;j < nTrs.length;j++){
                    if($(nTrs[j]).children("td").eq(1).text() == newAccounts[i].id){
                        $(nTrs[j]).children("td").eq(0).children("input").prop("checked","checked");
                    }
                }   //end for
            }   //end for
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
        },
        fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache:true,
    });



    $("input[name='groupName']","#editGroup").val(groupName);
    $(".modal-title","#editGroup").text("编辑部门分组:"+ groupName);       //设置标题名称
    $(".btn-primary","#editGroup").attr("onclick","editGroup(" + groupId + ',\'' + groupName + '\');');  //设置确定按钮
}
/*
 *  函数:编辑设置中的部门组
 *  author:miaohuaiyu
 * */
function editGroup(groupId,oldGroupName){

    /* 编辑指定设置中的部门组 */
    var groupName =  $("input[name='groupName']","#editGroup").val();   //获取表单值
    var accounts = new Array();   //选中的部门
    var $prompt = $("h4","#editGroup").eq(1);
    var $modal = $(".bs-example-modal-eg");
    var $closeButton = $("button",$modal).eq(1);        //弹出框关闭按钮
    var $ensureButton = $("button",$modal).eq(2);       //弹出框确定按钮

    if(groupName.length == 0){
        promptInformation($prompt,"error","分组名不能为空");

        return;
    }else if(groupName.length > 10){
        promptInformation($prompt,"error","分组名不能大于10");

        return;
    }

    for(var i = 0;i < groupsName.length ;i++){
        if(groupName == groupsName[i] && groupName != oldGroupName){
            promptInformation($prompt,"error","分组名已经存在");

            return;
        }
    } //end for

    var $depTable = $("#datatable-checkbox1");
    var dttable = $depTable.dataTable();
    var nTrs = dttable.fnGetNodes();
    var depId;

    for(var i = 0;i < nTrs.length;i++){
        if(!$(nTrs[i]).children("td").eq(0).children("input").attr("disabled")){
            if( $(nTrs[i]).children("td").eq(0).children("input").prop("checked")){
                depId = $(nTrs[i]).children("td").eq(1).text();
                accounts.push(depId);
            }
        }
    }   //end for

    $ensureButton.attr("disabled","disabled"); //设置编辑确定按钮暂时不可用
    $.ajax({
        type: 'PUT',//请求类型
        url: '../account/group/' + groupId,//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        data: JSON.stringify({
                               "opt" :"update",
                               "name":groupName,
                               "group":accounts
        }),
        dataType: 'JSON', /*预期服务器返回的数据类型*/
        success: function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            if(json.result){
                promptInformation($prompt,"success","编辑成功 ..稍后跳转");  //操作成功提示
                setTimeout(function(){
                   reloadPage();
                }, 500);
            }else{
                $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
                promptInformation($prompt,"error",json.err_msg);  //操作失败提示
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $ensureButton.removeAttr("disabled"); //设置编辑确定按钮可用
        },
        fail: function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache: true,
    })
}

//初始化表格 默认无选中
function initTable(table,data){
    var $datatable = table;

    $datatable.dataTable( {
        data:data,
        columns:[
            {
                "render": function () {
                    return '<input type="checkbox" class="flat" name="table_records"/>';
                },
            },
            { "sTitle": "ID" },
            { "sTitle": "部门名称" },
        ],
        order:[
            [1, "asc"]
        ],
        columnDefs: [
            { orderable: false, targets: [0] },
        ],
        searching:false

    } );
}

/*函数:显示部门组列表*/
function displayGroupList(){
    $.ajax({
        type:'GET',//请求类型
        url:'../account/group/all',//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType:'JSON',/*预期服务器返回的数据类型*/
        success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            var groups = json.data.groups;
            var group;
            var $liObj;
            var $divObj;
            var $aObj;

            if(count(groups) == 0){
                createPNotify("提示信息","info","您可以在这里添加部门分组");
            }

            for(var i = 0;i < count(groups);i++){
                group = groups[i];
                groupsId.push(group.id);
                groupsName.push(group.name);   //将部门组名添加到数组中


                $liObj = $("#groupList","#myTabTemplate").clone();
                $divObj = $(".tab-pane","#tab-contentTemplate").clone();
                $liObj.attr("id",null);

                $aObj = $("a", $liObj);
                $aObj.text(group.name);
                $aObj.attr("href","#tab_content" + group.id);
                $aObj.attr("onclick","getGroupInfo(this)");

                $divObj.attr("id","tab_content" + group.id);

                if(i == 0){
                    $liObj.attr("class","active");
                    $divObj.attr("class","tab-pane active")
                }

                $liObj.css("display","block");

                $("#myTab").append($liObj);
                $(".tab-content").append($divObj);

            }// ~ end for

            if(groupsId.length != 0) {
                /* 显示第一个部门的内容*/
                $.ajax({
                    type: 'GET',//请求类型
                    url: '../account/group/' + groupsId[0],//请求地址
                    contentType: 'application/json;',//发送信息至服务器时内容编码类型
                    dataType: 'JSON', /*预期服务器返回的数据类型*/
                    success: function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
                        var departments = json.data.group;
                        var $liObj;

                        for (var i = 0; i < count(departments); i++) {
                            var dep = departments[i];
                            var depId = dep.id;     //id

                            //显示部门列表
                            $liObj = $("#departmentTemplate").clone();

                            $("#departmentId", $liObj).append(depId);      //设置部门id
                            $("#departmentName", $liObj).append(dep.name);    //设置部门名
                            $liObj.attr("id", "department" + depId);

                            $("#tab_content" + groupsId[0]).append($liObj);

                        }// ~ end for
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                    },
                    fail: function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
                    },
                    cache: true,
                });
            }   //end if
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest.status);
        },
        fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
            alert("fail!");
        },
        cache:true,
    });
}

/*函数：显示部门列表 默认无选中*/
function displayDepartementList($table) {
    /*获得所有部门*/
    /* Ajax:
     * 功能:查看所有部门
     * */
    $.ajax({
        type:'GET',//请求类型
        url:'../account/doc/target/scope/brief',//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType:'JSON',/*预期服务器返回的数据类型*/
        success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            accounts = json.data.scope;
            var datas = new Array();
            var arr = new Array();

            for(var i = 0; i < count(accounts); i++){
                arr = [];
                arr[1] = accounts[i].id;
                arr[2] = accounts[i].name;

                datas[i] = arr;
            }  //end for

            initTable($table,datas);  //创建表
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
        },
        fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache:true,
    });
}




